package com.gewu.pm.ui.fragment.home;

import android.view.View;
import android.widget.TextView;

import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.gewu.pm.R;
import com.gewu.pm.app.AppActivity;
import com.gewu.pm.app.AppFragment;
import com.gewu.pm.bean.TestBean;
import com.gewu.pm.ui.adapter.home.SalesStatementAdapter;
import com.gewu.pm.utils.MathUtils;
import com.hjq.base.BaseAdapter;

import java.util.ArrayList;
import java.util.List;

/**
 * 销售单据Fragment
 */
public final class SalesStatementFragment extends AppFragment<AppActivity> 
        implements BaseAdapter.OnItemClickListener {

    private TextView mPendingAmountView;
    private TextView mSettledAmountView;
    private TextView mAllView;
    private RecyclerView mRecyclerView;

    private SalesStatementAdapter mAdapter;
    private List<TestBean> mDataList = new ArrayList<>();

    private String mDateFilter = "默认7天"; // 日期筛选参数

    public static SalesStatementFragment newInstance() {
        return new SalesStatementFragment();
    }

    @Override
    protected int getLayoutId() {
        return R.layout.fragment_sales_statement;
    }

    @Override
    protected void initView() {
        mPendingAmountView = findViewById(R.id.tv_pending_amount);
        mSettledAmountView = findViewById(R.id.tv_settled_amount);
        mAllView = findViewById(R.id.tv_all);
        mRecyclerView = findViewById(R.id.rv_list);

        // 设置RecyclerView
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        mAdapter = new SalesStatementAdapter(getContext());
        mAdapter.setOnItemClickListener(this);
        mRecyclerView.setAdapter(mAdapter);

        // 设置顶部"全部"点击事件
        mAllView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                toast("顶部全部功能");
            }
        });
    }

    @Override
    protected void initData() {
        loadData();
    }

    @Override
    public void onItemClick(RecyclerView recyclerView, View itemView, int position) {
        TestBean bean = mAdapter.getItem(position);
        toast(bean.getName());
    }

    /**
     * 设置日期筛选参数并刷新数据
     * 
     * @param dateFilter 日期筛选参数（如：默认7天、今日、7天、30天）
     */
    public void setDateFilter(String dateFilter) {
        this.mDateFilter = dateFilter;
        // 刷新数据
        loadData();
    }

    /**
     * 加载数据
     * 
     * 功能说明：
     * 1. 清空原有数据
     * 2. 创建测试数据（实际项目中应根据日期筛选参数从服务器获取）
     * 3. 更新列表显示
     * 4. 计算并更新待结算和已结算金额
     */
    private void loadData() {
        // 清空数据列表
        mDataList.clear();

        // 创建测试数据（使用 TestBean）
        // 实际项目中应根据 mDateFilter 参数从服务器获取数据
        TestBean bean1 = new TestBean("1", "罗罗超市");
        TestBean bean2 = new TestBean("2", "双东路生鲜店");
        TestBean bean3 = new TestBean("3", "南京路超市");

        mDataList.add(bean1);
        mDataList.add(bean2);
        mDataList.add(bean3);
        
        // 更新适配器数据
        mAdapter.setData(mDataList);

        // 计算并更新待结算和已结算金额
        updateAmounts();
    }

    /**
     * 更新待结算和已结算金额
     * 
     * 功能说明：
     * 1. 遍历当前显示的列表数据
     * 2. 累加待结算金额和已结算金额（使用 MathUtils.moneyAdd 确保金额精度）
     * 3. 更新顶部金额显示
     * 
     * 注意：
     * - 实际项目中，金额应该从 Bean 中获取
     * - 这里为了演示，使用固定金额
     */
    private void updateAmounts() {
        // 初始化金额
        double pendingAmount = 0.0;
        double settledAmount = 0.0;

        // 遍历当前显示的列表数据，累加金额
        // 注意：这里使用固定金额演示，实际应从 Bean 中获取
        for (TestBean bean : mDataList) {
            // 使用 MathUtils.moneyAdd 累加金额（确保金额精度）
            pendingAmount = MathUtils.moneyAdd(pendingAmount, 275.00);
            settledAmount = MathUtils.moneyAdd(settledAmount, 275.00);
        }

        // 更新待结算和已结算金额显示
        mPendingAmountView.setText(String.format("¥%.1f", pendingAmount));
        mSettledAmountView.setText(String.format("¥%.1f", settledAmount));
    }
}
